package xin.alum.aim.handler;

import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel;
import xin.alum.aim.constant.AimClose;
import xin.alum.aim.groups.Session;
import xin.alum.aim.model.Events;
import xin.alum.aim.socks.SocksHandShake;
import xin.alum.aim.websocks.WebSocketHandShake;

/**
 * @author alum(alum @ live.cn)
 * @date 2021/8/4 20:08
 */
public interface AimReceive extends WebSocketHandShake, SocksHandShake {

    /**
     * 握手成功业务处理类，此方法支持Async异步处理
     *
     * @param ch
     */
    void onHandShaked(Channel ch);

    /**
     * 收到客户端的Ping操作
     */
    void onPing(Channel ch);

    /**
     * 客户端消息回调
     *
     * @param text
     */
    void onText(Channel ch, String text);

    void onByte(Channel ch, ByteBuf buf);

    /**
     * 接受消息
     *
     * @param msg
     */
    void onRecive(Channel ch, Events msg);

    /**
     * 处理互踢旧连接关闭业务逻辑
     *
     * @param old
     */
    Events onKick(Channel old, Session session);

    /**
     * 关闭连接通道
     *
     * @param ch
     * @param heartbeat
     */
    void onClose(Channel ch, AimClose heartbeat);
}
